#include <bits/stdc++.h>
using namespace std;

// 先推导公式，化简得到 S = gcd3(Ha, Hb, Hc) 的公式。 gcd3是三个数的最大公因子。 推导过程见 https://www.lanqiao.cn/problems/19711/learning/ 
// 点击左侧面板的 “题解” 按钮可以看到。
// 这意味着 Ha %S == 0, Hb%S == 0, Hc%S == 0
// 可以采取搜索法求 S_max, 但是不能用二分搜索，只能逐个搜索，这是因为：
// 考虑 H = {1, 2, 3, 3, 4, 5, 9}
// 
// 显然 s = gcd3{3, 3, 9} = 3, 无法得出比 3 小的 任何S 都可以从 H 中找三个数满足约束条件，也无法得出比 3 大的任何S 都可以从H中找出三个数满足约束条件，所以不能用二分法。只能用逐个元素搜索法。

// 对本题用穷举法本质上就是从集合 A = {H_i}中，仍选 3 个元素计算 S 值
// 得到集合 S = {s_i}，求 max{s_i}
long long n;
long long H[1000000]; // H[0:n]
long long t[3]; // 记录选择的三个 H_i作为 H_a, H_b, H_c

// 读取数据
void ReadData() 
{
    cin>>n;
    for(long long i=0;i<n;i++)
    {
        cin>>H[i];
    }
}

// 给定 s 是否能在 H[] 内找到至少三个元素都是 s 的倍数
vector<long long> ans; // 记录H[]内是 s 的倍数的元素
bool IsCS(long long s) {
    ans.resize(0); // 清空 ans
    for(int i = 0; i < n; i++) {
        if (H[i] < s) continue;
        if (H[i]%s == 0) {
            ans.push_back(H[i]);
        }
        if(ans.size() == 3) return true;
    }
    
    return false;
}

// 从大到小求满足约束条件 IsCS() 的最大 S
int Search () 
{
    long long S = H[n-1];
    while(S >=1) {
        if(IsCS(S)) { // 满足约束，S 就是所求
            return S;
        }
        S -= 1;
    }
    return 1;
}


int main()
{
    ReadData();

    // 对 H 升序排序
    std::sort(H, H+n);

    // 用计算
    Search();
    
    // 输出结果
    cout<< ans[0] <<" "<< ans[1] <<" "<< ans[2];
    return 0;
}